package com.xuecheng.orders.service;

import com.xuecheng.orders.model.dto.AddOrderDTO;
import com.xuecheng.orders.model.dto.PayRecordDTO;
import com.xuecheng.orders.model.po.XcOrders;
import com.xuecheng.orders.model.po.XcPayRecord;

/**
 * @author 勾新杰
 * @version 1.0
 * @description:
 * @date 2025/3/1 18:08
 */
public interface IOrderService {

    /**
     * 生成订单和二维码
     * @param addOrderDTO 订单信息
     * @return 支付记录和二维码（此时还未支付）
     */
    PayRecordDTO createOrder(AddOrderDTO addOrderDTO);

    /**
     * 根据支付交易号查询支付记录
     * @param payNo 支付交易号
     * @return 支付记录
     */
    XcPayRecord getByPayNo(String payNo);

    /**
     * 查询支付结果
     * @param payNo 支付交易号
     * @return 支付记录
     */
    PayRecordDTO queryPayResult(String payNo);

    /**
     * 支付成功后更新支付记录
     * @param payNo 支付交易号
     * @param outTradeNo 外部支付交易号
     * @param payChannel 支付渠道
     */
    void paySuccess(String payNo, String outTradeNo, String payChannel);

    /**
     * 根据订单号查询订单
     * @param orderId 订单号
     * @return 订单
     */
    XcOrders getOrderById(Long orderId);

    /**
     * 关闭交易
     * @param payNo 支付流水号
     */
    void closeTrade(String payNo);
}
